package com.study.fastdfs;

import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;

public class FastDfsTest {
	/**
	 * fastdfs 不支持对历史文件的覆盖更新，但是在业务中，会存在一个用户只需要保留一份用户图像的场景。所以需要对fastdfs接口进行改造。
	 * 通过试验，发现可以通过后缀名的方式对指定的文件名进行更新。
	 * 测试用例中，必须先存在文件group1/M00/05/39/rBAFI1pYeQSAGL-YABlD1nkUo9Q189.jpg、才支持通过后缀名uuid的方式覆盖更新文件。
	 */
	private final static String REMOTE_PATH = "M00/64/4B/wKgURFt9I4eAKRU_AABycq0g9rg783.png";

	private final static String GROUP = "group1";

	public static void main(String[] args) throws Exception {
		//group1/M00/64/09/wKgURFt7hueAW0rVAAAADSghvvI372.txt
		// 需要重新替换的文件名称
		//String filePath = "incentive.dump";
		String filePath = "ggg.png";

		File file = new File(filePath);
		// 使用MD5加密（经过验证，最多只支持16位后缀）
		ClientGlobal.init("fdfs_client.conf");
		System.out.println("ClientGlobal.configInfo(): " + ClientGlobal.configInfo());
		String uuid = "hhhh1112";
		// 获取fdfs客户端
		StorageServer storageServer = null;
		TrackerClient tracker = new TrackerClient();
		TrackerServer trackerServer = tracker.getConnection();
		StorageClient client = new StorageClient(trackerServer,storageServer);
		// 删除文件
		client.delete_file(GROUP, REMOTE_PATH.concat(uuid).concat(".png"));



		// 重新上传新文件

		System.out.println(uuid);
		NameValuePair[] meta_list = new NameValuePair[2];
		meta_list[0] = new NameValuePair("fileName", file.getName());
		meta_list[1] = new NameValuePair("uuid", uuid);
		String[] results = client.upload_file(GROUP, REMOTE_PATH, uuid, file.getName(), "temp", null);
		System.out.println(GROUP.concat("/").concat(results[1]));

//		int num = 100;
//		CountDownLatch latch = new CountDownLatch(num);
//		for(int i=0; i<num; i++){
//			Thread thread = new Thread(()->{
//				latch.countDown();
//				try {
//					String[] results = client.upload_file(GROUP, REMOTE_PATH, uuid, file.getName(), "temp", null);
//					System.out.println(GROUP.concat("/").concat(results[1]));
//				} catch (IOException e) {
//					e.printStackTrace();
//				} catch (MyException e) {
//					e.printStackTrace();
//				}
//			});
//			thread.start();
//		}


//		String[] results  = client.upload_file(file.getName(), "txt", meta_list);
//		System.out.println(GROUP.concat("/").concat(results[1]));
	}

}
